#ifndef C_LOGGER_H
#define C_LOGGER_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

// 声明日志记录器实例类型
typedef void* logger_t;

// 创建日志记录器实例
logger_t create_logger(const char* tag);

// 销毁日志记录器实例
void destroy_logger(logger_t logger);

// 实例日志记录函数
void log_info(logger_t logger, const char* format, ...);
void log_warn(logger_t logger, const char* format, ...);
void log_error(logger_t logger, const char* format, ...);

// 模块日志记录器注册宏
#define CLOG_MODULE_REGISTER(tag) \
    static logger_t __module_logger = NULL; \
    static const char* __module_tag = tag; \
    static logger_t get_module_logger(void) { \
        if (__module_logger == NULL) { \
            __module_logger = create_logger(__module_tag); \
        } \
        return __module_logger; \
    }

// 自动创建和销毁日志记录器实例的宏
// 自动创建和销毁日志记录器实例的宏
#define CLOG_AUTO(logger_var, tag) \
    static logger_t logger_var = NULL; \
    if ((logger_var) == NULL) { \
        (logger_var) = create_logger(tag); \
    }

#define CLOG_DESTROY(logger_var) \
    if ((logger_var) != NULL) { \
        destroy_logger(logger_var); \
        (logger_var) = NULL; \
    }

// 模块日志记录宏


// 模块日志记录宏
#define CLOG_INF(fmt, ...) \
    do { \
        logger_t logger = get_module_logger(); \
        if (logger != NULL) { \
            log_info(logger, fmt, ##__VA_ARGS__); \
        } \
    } while (0)

#define CLOG_WRN(fmt, ...) \
    do { \
        logger_t logger = get_module_logger(); \
        if (logger != NULL) { \
            log_warn(logger, fmt, ##__VA_ARGS__); \
        } \
    } while (0)

#define CLOG_ERR(fmt, ...) \
    do { \
        logger_t logger = get_module_logger(); \
        if (logger != NULL) { \
            log_error(logger, fmt, ##__VA_ARGS__); \
        } \
    } while (0)

#ifdef __cplusplus
}
#endif

#endif // C_LOGGER_H